package org.qqcui.designpattern.patterns.template;

/**
 * 制作豆浆的抽象类
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2022/5/6 10:32
 **/
public abstract class SoyaMilk {

    public final void make() {
        // 选豆子
        select();
        if (customerWantIngredients()) {
            // 添加配料
            addIngredients();
        }
        // 浸泡
        soak();
        // 打豆浆
        beat();
    }

    /**
     * 钩子方法，决定是否需要添加配料
     * @return true: 需要添加配料，false: 不需要添加配料
     */
    public boolean customerWantIngredients() {
        return true;
    }

    public void select() {
        System.out.println("第一步：选择新鲜的豆子");
    }

    public abstract void addIngredients();

    public void soak() {
        System.out.println("第三步：豆子和配料开始浸泡3H");
    }

    public void beat() {
        System.out.println("第四步：豆子和配料放到豆浆机中榨汁");
    }
}
